package com.vrp3d.service;

import java.util.List;

/**
 * Redis的基础服务(涉及时间的,单位都是秒)
 *
 * @author vrp3d
 */
public interface RedisService {

    /**
     * 保存数据到redis中
     *
     * @param [key, data]
     * @return void
     * @author huangxiong
     * @date 2019/7/5 9:40
     */
    void putCache(String key, String data);

    /**
     * 保存数据到redis中,在特定时间之后自动销毁数据
     *
     * @param [key, data, expireTime]
     * @return void
     * @author huangxiong
     * @date 2019/7/5 9:42
     */
    void putCacheWithExpireTime(String key, String data, int expireTime);

    /**
     * 删除key
     *
     * @param [key]
     * @return void
     * @author huangxiong
     * @date 2019/7/5 9:42
     */
    void remove(String key);

    /**
     * 根据key查询数据
     *
     * @param key
     * @return java.lang.String
     * @author huangxiong
     * @date 2019/7/5 9:49
     */
    String query(String key);

    /**
     * 查询指定前缀的keys集合
     *
     * @param key
     * @return
     */
    List<String> queryWithPrefix(String key);

    /**
     * 根据key查询数据过期时间
     *
     * @param key
     * @return
     */
    Long queryExpirationTime(String key);

    /**
     * 保存的数据自增
     *
     * @param [key]
     * @return long
     * @author huangxiong
     * @date 2019/7/5 9:49
     */
    long autoIncr(String key);

    /**
     * 自增,生命周期以最近一次登录时间为准
     *
     * @param [key, time]
     * @return long
     * @author huangxiong
     * @date 2019/7/5 9:49
     */
    long incrOnExpireKey(String key, Integer time);

    /**
     * 判断key是否存在
     *
     * @param [key]
     * @return boolean
     * @author huangxiong
     * @date 2019/7/5 9:49
     */
    boolean exits(final String key);

    /**
     * 判断key是否存在
     *
     * @param [key, value]
     * @return long
     * @author huangxiong
     * @date 2019/7/5 9:49
     */
    long incrByKey(String key, Integer value);
}
